package com.itheima.reggie.common;

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLException;

/**
 * 全局异常处理器
 * 将来项目中出现异常,就交给异常处理器来响应
 */
@RestControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 处理自定义异常
     * @param ce
     * @return
     */
    @ExceptionHandler(CustomerException.class)
    public R<String> CustomerException(CustomerException ce){
        //输出异常信息
        ce.printStackTrace();
        //抓住自定义异常类,需要响应对应信息给前端
        return R.error(ce.getMessage());

    }

    //每一个方法,就处理一个特定的异常
    @ExceptionHandler(SQLException.class)
    public R<String> sqlException(SQLException e) {
        //输出异常信息
        e.printStackTrace();

        //判断SQL异常信息属于哪一种类型
        if (e.getMessage().contains("Duplicate entry")) {
            //对错误信息进行截取: Duplicate entry 'zs' for key 'idx_username'
            String username = e.getMessage().split(" ")[2]; //'zs'
            return R.error(username + "用户名已存在");
        }
        //对错误信息进行截取: Data truncation: Data too long for column 'id_number' at row 1
        if (e.getMessage().contains("Data too long")) {
            String col = e.getMessage().split(" ")[7];
            return R.error(col + "数据长度过长");
        }

        return R.error("未知错误");
    }

}
